//
0x60c06040523480156200001157600080fd5b50604051620040b1380380620040b183398101604081905262000034916200012e565b6040518060400160405280600b81526020016a4275636b65744e4654563360a81b81525060405180604001604052806005815260200164424b54563360d81b815250816000908162000087919062000212565b50600162000096828262000212565b505050620000b3620000ad620000d860201b60201c565b620000dc565b6006805460ff60a01b191690556080919091526001600160a01b031660a052620002de565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080604083850312156200014257600080fd5b825160208401519092506001600160a01b03811681146200016257600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200019857607f821691505b602082108103620001b957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200020d57600081815260208120601f850160051c81016020861015620001e85750805b601f850160051c820191505b818110156200020957828155600101620001f4565b5050505b505050565b81516001600160401b038111156200022e576200022e6200016d565b62000246816200023f845462000183565b84620001bf565b602080601f8311600181146200027e5760008415620002655750858301515b600019600386901b1c1916600185901b17855562000209565b600085815260208120601f198616915b82811015620002af578886015182559484019460019091019084016200028e565b5085821015620002ce5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051613d60620003516000396000818161057a01528181610f910152818161102801528181611105015281816111cf0152818161126701528181611d4e015281816125d501528181612890015261294201526000818161087901528181610cb301526129e00152613d606000f3fe60806040526004361061030b5760003560e01c8063711563d41161019a578063b88d4fde116100e1578063ddbcb5fa1161008a578063eec7ee7311610064578063eec7ee7314610904578063f2fde38b14610917578063fc3ed43a1461093757600080fd5b8063ddbcb5fa14610867578063e449f3411461089b578063e985e9c5146108bb57600080fd5b8063bbe33ea5116100bb578063bbe33ea51461081e578063c87b56dd14610831578063d0949f991461085157600080fd5b8063b88d4fde146107c9578063b8f4bd7b146107e9578063bb42eeb51461080957600080fd5b8063863e76db1161014357806398ca3b761161011d57806398ca3b7614610774578063a22cb46514610794578063b1724b46146107b457600080fd5b8063863e76db1461072a5780638da5cb5b1461074157806395d89b411461075f57600080fd5b80637c8130d3116101745780637c8130d3146106e25780638456cb591461070257806384ac79b01461071757600080fd5b8063711563d41461069a578063715018a6146106ba5780637acb7757146106cf57600080fd5b806338af3eed1161025e5780635ccfc3df116102075780636198e339116101e15780636198e3391461063a5780636352211e1461065a57806370a082311461067a57600080fd5b80635ccfc3df146105cc5780635ceb8b5b146105fa5780635d36598f1461061a57600080fd5b8063431cd92a11610238578063431cd92a146104fd57806346056777146105685780635c975abb1461059c57600080fd5b806338af3eed146104a85780633f4ba83a146104c857806342842e0e146104dd57600080fd5b80630cdd53f6116102c05780631c31f7101161029a5780631c31f7101461044857806323b872dd146104685780632e17de781461048857600080fd5b80630cdd53f6146103e85780630f5b2ca5146104085780631338736f1461042857600080fd5b806306fdde03116102f157806306fdde031461036e578063081812fc14610390578063095ea7b3146103c857600080fd5b8062f714ce1461031757806301ffc9a71461033957600080fd5b3661031257005b600080fd5b34801561032357600080fd5b5061033761033236600461348a565b610957565b005b34801561034557600080fd5b506103596103543660046134e8565b61096d565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b50610383610a52565b6040516103659190613573565b34801561039c57600080fd5b506103b06103ab366004613586565b610ae4565b6040516001600160a01b039091168152602001610365565b3480156103d457600080fd5b506103376103e336600461359f565b610b0b565b3480156103f457600080fd5b506103376104033660046135cb565b610c41565b34801561041457600080fd5b5061033761042336600461348a565b610d92565b34801561043457600080fd5b506103376104433660046135cb565b610da4565b34801561045457600080fd5b506103376104633660046135ed565b610dbf565b34801561047457600080fd5b5061033761048336600461360a565b610e29565b34801561049457600080fd5b506103376104a3366004613586565b610eb0565b3480156104b457600080fd5b506009546103b0906001600160a01b031681565b3480156104d457600080fd5b50610337610ec4565b3480156104e957600080fd5b506103376104f836600461360a565b610ed6565b34801561050957600080fd5b5061051d610518366004613586565b610ef1565b6040516103659190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526001600160a01b03608084015116608083015292915050565b34801561057457600080fd5b506103b07f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a857600080fd5b5060065474010000000000000000000000000000000000000000900460ff16610359565b3480156105d857600080fd5b506105ec6105e7366004613586565b610f8d565b604051908152602001610365565b34801561060657600080fd5b50610337610615366004613697565b611334565b34801561062657600080fd5b506103376106353660046136e3565b611380565b34801561064657600080fd5b50610337610655366004613586565b6113bc565b34801561066657600080fd5b506103b0610675366004613586565b6113cd565b34801561068657600080fd5b506105ec6106953660046135ed565b611432565b6106ad6106a8366004613725565b6114cc565b6040516103659190613764565b3480156106c657600080fd5b506103376115b3565b6105ec6106dd36600461348a565b6115c5565b3480156106ee57600080fd5b506105ec6106fd366004613586565b6115f5565b34801561070e57600080fd5b50610337611635565b6103376107253660046135cb565b611645565b34801561073657600080fd5b506105ec6201518081565b34801561074d57600080fd5b506006546001600160a01b03166103b0565b34801561076b57600080fd5b5061038361171e565b34801561078057600080fd5b5061033761078f3660046137a8565b61172d565b3480156107a057600080fd5b506103376107af3660046137ff565b61176a565b3480156107c057600080fd5b506105ec611775565b3480156107d557600080fd5b506103376107e43660046138b0565b611792565b3480156107f557600080fd5b506103376108043660046137a8565b61181a565b34801561081557600080fd5b506105ec611857565b61033761082c366004613697565b611865565b34801561083d57600080fd5b5061038361084c366004613586565b6119ce565b34801561085d57600080fd5b506105ec60001981565b34801561087357600080fd5b506105ec7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108a757600080fd5b506103376108b63660046136e3565b611a41565b3480156108c757600080fd5b506103596108d6366004613992565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6106ad6109123660046139c0565b611a7d565b34801561092357600080fd5b506103376109323660046135ed565b611b81565b34801561094357600080fd5b506105ec610952366004613586565b611c0e565b61095f611c34565b6109698282611c9f565b5050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610a0057507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a4c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060008054610a6190613a87565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8d90613a87565b8015610ada5780601f10610aaf57610100808354040283529160200191610ada565b820191906000526020600020905b815481529060010190602001808311610abd57829003601f168201915b5050505050905090565b6000610aef82611dfd565b506000908152600460205260409020546001600160a01b031690565b6000610b16826113cd565b9050806001600160a01b0316836001600160a01b031603610ba45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610bc05750610bc081336108d6565b610c325760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610b9b565b610c3c8383611e61565b505050565b81610c4b81611ee7565b6009546001600160a01b0316610c8d576040517ffd0f14be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008381526008602052604090206003810154610ca990611f3a565b80548390610cd8907f000000000000000000000000000000000000000000000000000000000000000090613b09565b1080610ce2575082155b15610d19576040517fb372601600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82816000016000828254610d2d9190613b09565b9091555050600954610d48906001600160a01b031684611f75565b6009546040518481526001600160a01b039091169085907f1b606d34afacd55873aba0fd274841a10c63e18455f2dffebad2fc60a36b2c839060200160405180910390a350505050565b610d9a611c34565b6109698282612002565b610dac611c34565b610db5816120db565b6109698282612144565b610dc76121ef565b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f373c72efabe4ef3e552ff77838be729f3bc3d8c586df0012902d1baa2377fa1d90600090a250565b610e333382612249565b610ea55760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610b9b565b610c3c8383836122c7565b610eb8611c34565b610ec181612515565b50565b610ecc6121ef565b610ed461266b565b565b610c3c83838360405180602001604052806000815250611792565b610f2c6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b610f35826126db565b50600090815260086020908152604091829020825160a08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004909101546001600160a01b0316608082015290565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610fef576040517ffd0f14be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6352211e0000000000000000000000000000000000000000000000000000000081526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561106f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110939190613b1c565b6001600160a01b0316146110d3576040517f6d24b9c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f431cd92a000000000000000000000000000000000000000000000000000000008152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063431cd92a9060240160a060405180830381865afa158015611154573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111789190613b39565b90506111878160600151611f3a565b61119481604001516126e4565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd90606401600060405180830381600087803b15801561121b57600080fd5b505af115801561122f573d6000803e3d6000fd5b50506040517f0f5b2ca500000000000000000000000000000000000000000000000000000000815260048101869052600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169250630f5b2ca59150604401600060405180830381600087803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b505082516020840151600093506112f092506112e6906005613baf565b846080015161271f565b6000818152600a602052604080822087905551919250859183917fdaa4d27cae4639e4b33e50fad8f08ce76cfcacd46c0dd1f0be508742647ebe0b91a39392505050565b61133c611c34565b611345816120db565b60005b8281101561137a5761137284848381811061136557611365613bc6565b9050602002013583612144565b600101611348565b50505050565b611388611c34565b60005b81811015610c3c576113b48383838181106113a8576113a8613bc6565b90506020020135612822565b60010161138b565b6113c4611c34565b610ec181612822565b6000818152600260205260408120546001600160a01b031680610a4c5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610b9b565b60006001600160a01b0382166114b05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610b9b565b506001600160a01b031660009081526003602052604090205490565b60606114d6611c34565b6114df856129de565b6114e8846120db565b346114f38387613baf565b1461152a576040517fb372601600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff81111561154357611543613832565b60405190808252806020026020018201604052801561156c578160200160208202803683370190505b50905060005b828110156115aa5761158586868661271f565b82828151811061159757611597613bc6565b6020908102919091010152600101611572565b50949350505050565b6115bb6121ef565b610ed46000612a38565b60006115cf611c34565b346115d9816129de565b6115e2846120db565b6115ed81858561271f565b949350505050565b6000611600826126db565b6000828152600860205260409020600381015461161c90611f3a565b61162e81600201548260010154612aa2565b9392505050565b61163d6121ef565b610ed4612add565b61164d611c34565b8161165781611ee7565b611660826120db565b6000838152600860205260409020600281015461167c906126e4565b80600101548310156116ba576040517f4af51a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b348160000160008282546116ce9190613bf5565b9091555050600181018390558054604080519182526020820185905285917fd29e04160a74f0dbab5e7b82ef0392d86d11ac2939e5883eb3353be4cfedb83e91015b60405180910390a250505050565b606060018054610a6190613a87565b611735611c34565b60005b8281101561137a5761176284848381811061175557611755613bc6565b9050602002013583612002565b600101611738565b610969338383612b4c565b6117846201518061016d613baf565b61178f906003613baf565b81565b61179c3383612249565b61180e5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610b9b565b61137a84848484612c38565b611822611c34565b60005b8281101561137a5761184f84848381811061184257611842613bc6565b9050602002013583611c9f565b600101611825565b61178f620151806003613baf565b61186d611c34565b600182116118a7576040517ffd0f14be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b0816120db565b34600080845b80156119c557600019018686828181106118d2576118d2613bc6565b9050602002013592506118e483611ee7565b6000838152600860205260409020600381015490925061190390611f3a565b61191582600201548360010154612aa2565b85101561194e576040517f4af51a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815461195a9085613bf5565b935080156119705761196b83612cc1565b6118b6565b6000196002830155838255600182018590556040517fb3f4c8ca702dbbd32d9a25ce17b1942a5060284d9d69fc4fcac8fb0397891b12906119b8908990899088908a90613c08565b60405180910390a16118b6565b50505050505050565b60606119d982611dfd565b60006119f060408051602081019091526000815290565b90506000815111611a10576040518060200160405280600081525061162e565b80611a1a84612d7c565b604051602001611a2b929190613c67565b6040516020818303038152906040529392505050565b611a49611c34565b60005b81811015610c3c57611a75838383818110611a6957611a69613bc6565b90506020020135612515565b600101611a4c565b6060611a87611c34565b611a90846129de565b611a99836120db565b34825185611aa79190613baf565b14611ade576040517fb372601600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815167ffffffffffffffff811115611af857611af8613832565b604051908082528060200260200182016040528015611b21578160200160208202803683370190505b50905060005b8251811015611b7957611b548585858481518110611b4757611b47613bc6565b602002602001015161271f565b828281518110611b6657611b66613bc6565b6020908102919091010152600101611b27565b509392505050565b611b896121ef565b6001600160a01b038116611c055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b9b565b610ec181612a38565b6000611c19826126db565b600082815260086020526040902060030154610a4c90612e1c565b60065474010000000000000000000000000000000000000000900460ff1615610ed45760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b9b565b81611ca981611ee7565b60008381526008602052604090206003810154611cc590612e1c565b15611cfc576040517f4e395b8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d0584612cc1565b6000848152600a60205260409020548015611db2576040517ef714ce000000000000000000000000000000000000000000000000000000008152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169062f714ce90604401600060405180830381600087803b158015611d9957600080fd5b505af1158015611dad573d6000803e3d6000fd5b505050505b611dc0848360000154611f75565b6040516001600160a01b0385169086907fd964a27d45f595739c13d8b1160b57491050cacf3a2e5602207277d6228f64ee90600090a35050505050565b6000818152600260205260409020546001600160a01b0316610ec15760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610b9b565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190611eae826113cd565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611ef0816113cd565b6001600160a01b0316336001600160a01b031614610ec1576040517f6d24b9c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000198114610ec1576040517f43febe2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611fc2576040519150601f19603f3d011682016040523d82523d6000602084013e611fc7565b606091505b5050905080610c3c576040517f9a7058e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8161200c81611ee7565b6000838152600860205260409020600381015461202890611f3a565b60048101546001600160a01b03808516911603612071576040517ffd0f14be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851690811790915560405190815284907f6f08c7e76d830d5f3d0a18fd27f4d8c0049b24a8689ddb39625e0864d894a9c190602001611710565b6120e86201518082613c96565b15158061210d57506120ff6201518061016d613baf565b61210a906003613baf565b81115b15610ec1576040517f4af51a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8161214e81611ee7565b6000838152600860205260409020600381015461216a90611f3a565b61217c81600201548260010154612aa2565b8310156121b5576040517f4af51a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600019600282015560405183815284907f907fece23ce39fbcbceb71e515043fe29408353fbb393b25b35eb8a70a4bad0b90602001611710565b6006546001600160a01b03163314610ed45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b9b565b600080612255836113cd565b9050806001600160a01b0316846001600160a01b0316148061229c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806115ed5750836001600160a01b03166122b584610ae4565b6001600160a01b031614949350505050565b826001600160a01b03166122da826113cd565b6001600160a01b0316146123565760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610b9b565b6001600160a01b0382166123d15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b9b565b6123de8383836001612e8e565b826001600160a01b03166123f1826113cd565b6001600160a01b03161461246d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610b9b565b600081815260046020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8061251f81611ee7565b6000828152600860205260409020600381015461253b90611f3a565b61254d81600201548260010154612aa2565b15612584576040517f4e395b8500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b426002820181905560038201556000838152600a6020526040902054801561263a576040517f2e17de78000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e17de7890602401600060405180830381600087803b15801561262157600080fd5b505af1158015612635573d6000803e3d6000fd5b505050505b60405184907f11725367022c3ff288940f4b5473aa61c2da6a24af7363a1128ee2401e8983b290600090a250505050565b612673612f16565b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b610ec181611dfd565b6000198114610ec1576040517fda808c7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061272e60075460010190565b60078190556040805160a0810182528781526020808201888152600019838501818152606085019182526001600160a01b038a81166080870190815260008981526008909652969094209451855591516001850155905160028401555160038301559151600490910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190921617905590506127ce3382612f80565b604080516001600160a01b03851681526020810187905290810185905281907f17700ceb1658b18206f427c1578048e87504106b14ec69e9b4586d9a95174a329060600160405180910390a2949350505050565b8061282c81611ee7565b60008281526008602052604090206002810154612848906126e4565b6000838152600a602052604090205480156129a7576040517f431cd92a0000000000000000000000000000000000000000000000000000000081526004810182905261290f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063431cd92a9060240160a060405180830381865afa1580156128df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129039190613b39565b60400151600019141590565b6129a7576040517f6198e339000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636198e33990602401600060405180830381600087803b15801561298e57600080fd5b505af11580156129a2573d6000803e3d6000fd5b505050505b42600283015560405184907ff27b6ce5b2f5e68ddb2fd95a8a909d4ecf1daaac270935fff052feacb24f184290600090a250505050565b7f0000000000000000000000000000000000000000000000000000000000000000811015610ec1576040517fb372601600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006000198303612ab4575080610a4c565b6000612ac08385613bf5565b9050428111612ad3576000915050610a4c565b4290039392505050565b612ae5611c34565b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126be3390565b816001600160a01b0316836001600160a01b031603612bad5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b9b565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612c438484846122c7565b612c4f84848484612f9a565b61137a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b9b565b6000612ccc826113cd565b9050612cdc816000846001612e8e565b612ce5826113cd565b600083815260046020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60606000612d8983613159565b600101905060008167ffffffffffffffff811115612da957612da9613832565b6040519080825280601f01601f191660200182016040528015612dd3576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084612ddd57509392505050565b60006000198203612e59576040517fc4c7fabe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e69620151806003613baf565b612e739084613bf5565b9050428111612e855750600092915050565b42900392915050565b600181111561137a576001600160a01b03841615612ed4576001600160a01b03841660009081526003602052604081208054839290612ece908490613b09565b90915550505b6001600160a01b0383161561137a576001600160a01b03831660009081526003602052604081208054839290612f0b908490613bf5565b909155505050505050565b60065474010000000000000000000000000000000000000000900460ff16610ed45760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b9b565b61096982826040518060200160405280600081525061323b565b60006001600160a01b0384163b1561314e576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612ff7903390899088908890600401613cd1565b6020604051808303816000875af1925050508015613050575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261304d91810190613d0d565b60015b613103573d80801561307e576040519150601f19603f3d011682016040523d82523d6000602084013e613083565b606091505b5080516000036130fb5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b9b565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506115ed565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106131a2577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106131ce576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106131ec57662386f26fc10000830492506010015b6305f5e1008310613204576305f5e100830492506008015b612710831061321857612710830492506004015b6064831061322a576064830492506002015b600a8310610a4c5760010192915050565b61324583836132c4565b6132526000848484612f9a565b610c3c5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b9b565b6001600160a01b03821661331a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b9b565b6000818152600260205260409020546001600160a01b03161561337f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b9b565b61338d600083836001612e8e565b6000818152600260205260409020546001600160a01b0316156133f25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b9b565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0381168114610ec157600080fd5b6000806040838503121561349d57600080fd5b8235915060208301356134af81613475565b809150509250929050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610ec157600080fd5b6000602082840312156134fa57600080fd5b813561162e816134ba565b60005b83811015613520578181015183820152602001613508565b50506000910152565b60008151808452613541816020860160208601613505565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061162e6020830184613529565b60006020828403121561359857600080fd5b5035919050565b600080604083850312156135b257600080fd5b82356135bd81613475565b946020939093013593505050565b600080604083850312156135de57600080fd5b50508035926020909101359150565b6000602082840312156135ff57600080fd5b813561162e81613475565b60008060006060848603121561361f57600080fd5b833561362a81613475565b9250602084013561363a81613475565b929592945050506040919091013590565b60008083601f84011261365d57600080fd5b50813567ffffffffffffffff81111561367557600080fd5b6020830191508360208260051b850101111561369057600080fd5b9250929050565b6000806000604084860312156136ac57600080fd5b833567ffffffffffffffff8111156136c357600080fd5b6136cf8682870161364b565b909790965060209590950135949350505050565b600080602083850312156136f657600080fd5b823567ffffffffffffffff81111561370d57600080fd5b6137198582860161364b565b90969095509350505050565b6000806000806080858703121561373b57600080fd5b8435935060208501359250604085013561375481613475565b9396929550929360600135925050565b6020808252825182820181905260009190848201906040850190845b8181101561379c57835183529284019291840191600101613780565b50909695505050505050565b6000806000604084860312156137bd57600080fd5b833567ffffffffffffffff8111156137d457600080fd5b6137e08682870161364b565b90945092505060208401356137f481613475565b809150509250925092565b6000806040838503121561381257600080fd5b823561381d81613475565b9150602083013580151581146134af57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156138a8576138a8613832565b604052919050565b600080600080608085870312156138c657600080fd5b84356138d181613475565b93506020858101356138e281613475565b935060408601359250606086013567ffffffffffffffff8082111561390657600080fd5b818801915088601f83011261391a57600080fd5b81358181111561392c5761392c613832565b61395c847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613861565b9150808252898482850101111561397257600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156139a557600080fd5b82356139b081613475565b915060208301356134af81613475565b6000806000606084860312156139d557600080fd5b833592506020808501359250604085013567ffffffffffffffff808211156139fc57600080fd5b818701915087601f830112613a1057600080fd5b813581811115613a2257613a22613832565b8060051b9150613a33848301613861565b818152918301840191848101908a841115613a4d57600080fd5b938501935b83851015613a775784359250613a6783613475565b8282529385019390850190613a52565b8096505050505050509250925092565b600181811c90821680613a9b57607f821691505b602082108103613ad4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610a4c57610a4c613ada565b600060208284031215613b2e57600080fd5b815161162e81613475565b600060a08284031215613b4b57600080fd5b60405160a0810181811067ffffffffffffffff82111715613b6e57613b6e613832565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151613ba381613475565b60808201529392505050565b8082028115828204841417610a4c57610a4c613ada565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80820180821115610a4c57610a4c613ada565b6060815283606082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851115613c4157600080fd5b8460051b8087608085013760208301949094525060408101919091520160800192915050565b60008351613c79818460208801613505565b835190830190613c8d818360208801613505565b01949350505050565b600082613ccc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500690565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613d036080830184613529565b9695505050505050565b600060208284031215613d1f57600080fd5b815161162e816134ba56fea2646970667358221220c71469238115cf7744343ecd1a955c4992576a922b1fe0ac87114ff6ee7342f664736f6c634300081100330000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000008ee521d2179576bcc4bd33a00904e96a11678052